IOS中GPS定位偏移纠正(适用于Google地图)

您所在的位置:网站首页 谷歌地图 ios IOS中GPS定位偏移纠正(适用于Google地图)

IOS中GPS定位偏移纠正(适用于Google地图)

2024-06-03 14:30| 来源: 网络整理| 查看: 265

    在这个神奇的国度里,我们总得学习一些有中国特色的东东,例如“火星坐标”。也许有人还不知道这是什么玩意,我就简要介绍一下吧。      如果你有带GPS模块的智能手机,打开定位功能,然后访问Google地图。只要你身处中国大陆,你就会发现定位不准,大概有几百米的偏差。然而运行一些导航软件,你又会发现定位很准确,说明手机的GPS模块确实是正常的。

     这种现象是怎么造成的呢?答案是人为造成的。简单来说,GPS模块获取到的坐标是WGS84坐标系的,中国政府出于种种目的的考虑,不允许中国的地图使用国际通用的WGS84坐标系,而非要加上一些偏移,这样的坐标系就俗称“火星坐标系”。而Google地图采用的也是加偏移过的火星坐标系,但GPS模块传给它的坐标却没有加偏移,于是就出现几百米的偏差了。这样的后果就是没法做需要很高精度的地理位置的应用了,就像那个悲剧的Google地图一样,你迷路时无法指望它告诉你正确的位置。

     经过不懈的努力, 终于发现一位牛人用C语言写了一个算法, 不过他要用到一个数据文件, 而且比较大, 放在手机客户端一跑就内存崩溃了, 所以觉得不可取, 于是把他的C代码转化为C#的WebService服务. 代码如下, 供大家参考.希望对大家有所帮助!

 

C#代码  收藏代码 class Program   {   const double M_PI = 3.14159265358979323846264338327950288;   const double M_E = 2.71828182845904523536028747135266250;      public class MapCoord   {       public int lng { set; get; }    //12151表示121.51       public int lat { set; get; }    //3130表示31.30       public int x_off { set; get; }  //地图x轴偏移像素值       public int y_off { set; get; }  //地图y轴偏移像素值   }      ///    /// 自定义比较类   ///    public class myReverserClass : IComparer   {       public int Compare(object x, object y)       {           MapCoord data1 = (MapCoord)x, data2 = (MapCoord)y;           int det_lng = data1.lng - data2.lng;           if (det_lng != 0)               return det_lng;           else               return data1.lat - data2.lat;       }   }      //这就需要一个把经纬度转换成地图xy轴坐标的算法:      private static double lngToPixel(double lng, int zoom)   {       return (lng + 180) * (256L 


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3